home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / R-Shows / (c)sdg.d64 / graphic tut-1.64 (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  18KB  |  435 lines

  1. 0 REM" P.J.PONZO*83*WATERLOO/ONTARIO
  2. 1 [143]"
  3. 1000 GOSUB60000:PRINTCHR$(142):PRINT"[147]               GRAPHICS-1"
  4. 1001 PRINT"[176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]"
  5. 1002 PRINT"[221]          GRAPHICS AND STUFF        [146] [221]":MS$="PONZOTUTOR"
  6. 1003 PRINT"[173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189][144]":GOSUB63100:MS$=" WELCOME!"
  7. 1004 GOSUB63100:GOSUB63000
  8. 1005 PRINT"[147]           THE VIDEO SCREEN"
  9. 1010 PRINT"LET'S FIND OUT HOW THE C64 DECIDES WHAT"
  10. 1020 PRINT"TO PUT IN ONE OF THE 1000 SCREEN"
  11. 1030 PRINT"LOCATIONS..SAY LOCATION #K."
  12. 1040 PRINT"(WHERE K=0 OR 1 OR 2 OR.. 999)"
  13. 1050 PRINT"1[146]:LOOK IN S[146]CREEN M[146]EMORY[146], IN LOCATION"
  14. 1060 PRINT"  SM[146]+K, AND GET 1 BYTE:N (0<=N<=255)"
  15. 1070 PRINT"2[146][146]:LOOK IN C[146]HARACTER M[146]EMORY[146], IN"
  16. 1080 PRINT"  LOCATIONS CM[146]+8*N,CM[146]+8*N+1,..CM[146]+8*N+7"
  17. 1090 PRINT"  AND GET 8 BYTES:P,P+1,..,P+7."
  18. 1100 PRINT"3[146]:LOOK IN COLOUR MEMORY[146], IN LOCATION"
  19. 1110 PRINT"  55296+K, AND GET 1 NYBBLE:C (0<=C<=15)"
  20. 1120 GOSUB63000
  21. 1130 PRINT"[147]THEN, ARMED WITH 8 BYTES P,P+1,...,P+7"
  22. 1140 PRINT"AND 1 NYBBLE C (4 BITS), THE C64"
  23. 1150 PRINT"USES THE 64 BITS OF P,P+1,...,P+7"
  24. 1160 PRINT"TO DETERMINE WHICH 'DOTS' OR 'PIXELS'"
  25. 1170 PRINT"AT SCREEN LOCATION K ARE TO BE ON[146]"
  26. 1180 PRINT"AND WHICH ARE TURNED OFF[146]."
  27. 1190 PRINT"THE OFF[146] PIXELS ARE IN THE BACKGROUND[146]"
  28. 1200 PRINT"COLOUR, AND THE ON[146] PIXELS ARE IN"
  29. 1210 PRINT"THE COLOUR GIVEN BY THE NYBBLE C[146]!"
  30. 1220 GOSUB63000
  31. 1230 PRINT"[147]IF THE 8 BYTES P,P+1,...,P+7 TAKEN FROM"
  32. 1240 PRINT"CHARACTER MEMORY[146], WHICH STARTS AT CM[146],"
  33. 1250 PRINT"GIVE THE 'PIXEL PATTERN' FOR THE LETTER"
  34. 1260 PRINT"'P', AND THE NYBBLE TAKEN FROM COLOUR"
  35. 1270 PRINT"MEMORY[146], WHICH STARTS AT 55296, IS"
  36. 1280 PRINT"C='10' (LIGHT RED), A LIGHT RED 'P'"
  37. 1290 PRINT"WILL APPEAR ON THE SCREEN IN THE K'TH"
  38. 1300 PRINT"SCREEN POSITION.":MS$="1=ON[146] 0=OFF[146]":GOSUB63100:GOSUB63000
  39. 1310 PRINT"[147]'NORMALLY' SCREEN MEMORY[146] STARTS AT"
  40. 1320 PRINT"SM=1024[146]. THESE 1000 MEMORY LOCATIONS,"
  41. 1330 PRINT"FROM 1024 TO 2023, HOLD 'CHARACTER"
  42. 1340 PRINT"NUMBERS'. IF THE LOCATION 1039 HOLDS"
  43. 1350 PRINT"N=17 THEN, SINCE 1039=1024+15 IS THE"
  44. 1360 PRINT"15'TH SCREEN POSITION, THIS 15'TH"
  45. 1370 PRINT"POSITION WILL DISPLAY THE 17'TH"
  46. 1380 PRINT"CHARACTER IN CHARACTER MEMORY[146]!"
  47. 1390 PRINT"(NOTE: SCREEN POSITIONS ARE NUMBERED"
  48. 1400 PRINT"       0,1,...999 SO #15 IS"
  49. 1405 PRINT"       REALLY THE 16'TH POSITION!)":GOSUB63000
  50. 1410 PRINT"[147]'NORMALLY' CHARACTER MEMORY[146] STARTS AT"
  51. 1420 PRINT"CM=53248 IF YOU'RE USING 'UPPER CASE"
  52. 1430 PRINT"AND GRAPHICS', AND STARTS AT"
  53. 1440 PRINT"CM=55296 IF YOU'RE USING 'LOWER AND"
  54. 1450 PRINT"UPPER CASE'."
  55. 1451 PRINT"NOTE[157][157][157][157][184][184][184][184][145]:FROM 53248 TO 55295 IS 2K BYTES"
  56. 1452 PRINT"    :FROM 55296 TO 57343 IS 2K BYTES"
  57. 1453 PRINT"    (2K FOR EACH 'CHARACTER SET')"
  58. 1455 MS$="  I CM ":GOSUB63100:GOSUB63000
  59. 1460 PRINT"[147]HOW DO YOU KNOW WHAT 'SM' IS?"
  60. 1470 PRINT"(WHERE SCREEN MEMORY[146] STARTS?)":
  61. 1475 MS$="  GUESS!":GOSUB63100:GOSUB63000
  62. 1480 PRINT"[147]LOOK IN V+24[146], THE 24'TH REGISTER"
  63. 1490 PRINT"IN THE VIDEO CHIP[146].":MS$="53248+24! ":GOSUB63100:GOSUB63000
  64. 1500 PRINT"[147]HOW DO YOU KNOW WHAT 'CM' IS?"
  65. 1510 PRINT"(WHERE CHARACTER MEMORY[146] STARTS?)":MS$="CM=???????":GOSUB63100
  66. 1520 GOSUB63000: PRINT"[147]LOOK IN V+24[146], THE 24'TH REGISTER"
  67. 1530 PRINT"IN THE VIDEO CHIP[146].":MS$="53248+24!!":GOSUB63100:GOSUB63000
  68. 1540 PRINT"[147]IN FACT THIS REGISTER, V+24[146],"
  69. 1550 PRINT"(V=53248[146] IS THE 'START' OF THE "
  70. 1560 PRINT"VIDEO CHIP) IS 8 BITS WIDE (1 BYTE)"
  71. 1570 PRINT"AND THE UPPER 4 BITS[146] (NYBBLE) GIVES"
  72. 1580 PRINT"THE START OF SCREEN MEMORY[146], SM,"
  73. 1590 PRINT"AND THE LOWER 4 BITS[146] GIVES THE"
  74. 1600 PRINT"START OF CHARACTER MEMORY[146], CM.":MS$="<SM>+<CM>":GOSUB63100
  75. 1610 GOSUB63000:PRINT"[147]SINCE 4 BITS CAN HAVE ONLY 16 VALUES"
  76. 1620 PRINT"THEN SCREEN MEMORY[146] CAN BE IN ONE OF"
  77. 1630 PRINT"16 POSSIBLE LOCATIONS, NAMELY:"
  78. 1640 PRINT"0,1024,2048,3072,4096,....,16384"
  79. 1650 PRINT"WHICH IS MORE EASILY THOUGHT OF AS"
  80. 1660 PRINT"1024 TIMES 0 OR 1 OR 2 ..OR 15."
  81. 1670 PRINT"SINCE SCREEN MEMORY[146] IS 'NORMALLY' AT"
  82. 1680 PRINT"1024 THEN THIS 'UPPER NYBBLE' CONTAINS"
  83. 1690 PRINT"'0001' IN BINARY OR '1' IN DECIMAL.":GOSUB63000
  84. 1700 PRINT"[147]SIMILARLY, CHARACTER MEMORY[146] CAN HAVE"
  85. 1710 PRINT"ONE OF 16 'STARTING ADDRESSES'..."
  86. 1720 PRINT"RIGHT?"
  87. 1725 MS$=" RIGHT[146]":GOSUB63100:GOSUB63000:PRINT"WRONG[146]!!!"
  88. 1730 PRINT"THE L[146]EAST S[146]IGNIFICANT B[146]IT IN V+24[146]"
  89. 1740 PRINT"ISN'T USED, SO THE 8[146] POSSIBLE"
  90. 1750 PRINT"LOWER NYBBLES IN V+24[146] ARE:"
  91. 1760 PRINT"000[214],001[214],010[214],011[214],100[214],101[214],110[214],111[214]"
  92. 1770 PRINT"EACH GIVING A DIFFERENT 'STARTING"
  93. 1780 PRINT"ADDRESS' FOR CHARACTER MEMORY[146],NAMELY:"
  94. 1790 PRINT"0,2048,4096,6144,....14336"
  95. 1800 PRINT"OR 2048*(0 OR 1 OR ... 7)":GOSUB63000
  96. 1810 PRINT"[147]'NORMALLY' CHARACTER MEMORY[146] IS AT"
  97. 1820 PRINT"CM=53248 (UPPER/GRAPHICS) OR"
  98. 1830 PRINT"CM=55296 (LOWER/UPPER) AND THE "
  99. 1840 PRINT"BIT PATTERNS 001[214] AND 011[214] WILL"
  100. 1850 PRINT"AUTOMATICALLY[146] SET CM=53248 OR CM=55296!"
  101. 1860 PRINT"(THE CHIP GOES TO THE CHARACTER ROMS!)"
  102. 1870 PRINT"ALSO YOU WON'T WANT TO USE 000[214] WHICH"
  103. 1880 PRINT"MEANS CM=0.(THE C64 NEEDS[146] THESE LOC'NS)"
  104. 1890 PRINT"SO YOU CAN STORE 'PIXEL PATTERNS' AT:"
  105. 1900 PRINT"2048,8192,10240,12288 OR 14336"
  106. 1905 PRINT"BE CAREFUL! BASIC PROGRAMS NORMALLY LIVE AT 2048+":GOSUB63000
  107. 1910 PRINT"[147]THESE 'STARTING ADDRESSES' FOR CM[146] & SM"
  108. 1920 PRINT"ALL LIE IN THE FIRST[157][157][157][157][157][183][183][183][183][183][145] 16K OF MEMORY."
  109. 1930 PRINT"IF YOU WANT ANOTHER 16K 'BANK' THEN"
  110. 1940 PRINT"CHANGE THE BOTTOM 2 BITS IN THE"
  111. 1950 PRINT"C[146]OMPLEX I[146]NTERFACE A[146]DAPTER CHIP #2"
  112. 1960 PRINT"AT ADDRESS 56576 ($DD00 IN HEX)."
  113. 1970 PRINT"JUST POKE56576,(PEEK(56576)AND252)ORX)
  114. 1980 [153]"WHERE X=0,1,2 OR 3 AND YOU GET"
  115. 1990 [153]"BANK '3-X'. (X=1 GIVES BANK #2!)"
  116. 2000 [153]"THESE 2 BITS IN CIAWAIT#2 ARE NORMALLY '3'"
  117. 2005 [153]"SO BANK #0 (FIRST 16K) IS SELECTED.":[141]63000
  118. 2006 [153]"LOADWE'LL WALK THRU' THE 4 BANKS IN TURN"
  119. 2007 [153]"SO YOU CAN SEE THE EFFECT."
  120. 2008 [153]"NOTE THAT IN BANKS 0 (NORMAL) AND 2"
  121. 2009 [153]"YOU'LL SEE SOME 'STANDARD'CLOSECHARACTERS"
  122. 2010 [153]"WITH CMWAIT=010(null) (BINARY) IN V+24.":[141]63000
  123. 2011 [129]X[178]0[164]2:[153]"LOADPOKE56576,(PEEK(56576)AND252)OR"[196](X)
  124. 2012 MS$[178]"BANK #"[170][196](3[171]X):[141]63100:[141]63000
  125. 2013 [151]56576,([194](56576)[175]252)[176]X:[141]63000:[151]56576,151:[130]
  126. 2014 [153]"LOADPOKE56576,(PEEK(56576)AND252)OR 3"
  127. 2015 MS$[178]"NORMAL NOW":[141]63100:[141]63000
  128. 2016 [153]"LOADSUPPOSE YOU SELECT BANK #0.":[153]"POKE 56576,(PEEK(56576)AND252)OR3"
  129. 2017 [153]"THEN ANY VIDEO ADDRESS IN 4096 TO 8191"
  130. 2018 [153]"WILL GIVE THE CHARACTER ROMWAIT (AT 53248)"
  131. 2019 [153]"YOU CAN'T POINT THE VIDEO CHIP TO"
  132. 2020 [153]"THIS ADDRESS RANGE..FOR SCREEN MEMORY.."
  133. 2021 [153]"OR YOUR OWN CHARACTER SET...":[153]"OR EVEN SPRITES!!"
  134. 2022 [153]"SIMILAR CONSTRAINTS HOLD FOR BANK #2"
  135. 2023 [153]"WHERE 36874-40959 IS UNACCESSIBLE":[153]"BY THE VIDEO CHIP!":[141]63000
  136. 2047 [153]"LOADOK...SO YOU WANT TO 'DESIGN' YOUR"
  137. 2048 [153]"OWN CHARACTER SET?"
  138. 2049 [153]"JUST POINT THE VIDEO CHIPWAIT TO"
  139. 2050 [153]"YOURCMDCMDCMDCMDFREFREFREFREON 'PIXEL PATTERNS'."
  140. 2060 [153]"MAKE UP THE 'DOTS ON' AND 'DOTS OFF'"
  141. 2070 [153]"WHICH DEFINE ALL 256 OR YOUR CHARACTERS"
  142. 2080 [153]"& POKE THESE BITS (8-AT-A TIME=1 BYTE!)
  143. 2090 PRINT"INTO CM,CM+1,...,CM+4095, CHOOSING"
  144. 2100 PRINT"CM[146] AS ONE OF THE AVAILABLE 'STARTING"
  145. 2110 PRINT"ADDRESSES' FOR CHARACTER MEMORY[146]"
  146. 2120 PRINT"THEN TELL THE VIDEO CHIP[146] BY"
  147. 2130 PRINT"SETTING THE LOWER 4 BITS OF V+24[146].":GOSUB63000
  148. 2140 PRINT"[147]           MULTI COLOUR MODE"
  149. 2150 PRINT"SINCE COLOUR MEMORY[146] HAS 1000 NYBBLES,"
  150. 2160 PRINT"ONE FOR EACH OF THE 1000 SCREEN POS'NS,"
  151. 2170 PRINT"THEN EACH CHARACTER ON THE SCREEN CAN"
  152. 2180 PRINT"HAVE ONE OF 16 DIFFERENT COLOURS."
  153. 2190 PRINT"(BUT ALL CHARACTERS SHARE THE SAME"
  154. 2200 PRINT"'BACKGROUND COLOUR')."
  155. 2210 PRINT"SUPPOSE YOU WANT MORE THAN 2[146] COLOURS"
  156. 2220 PRINT"WITHIN A SINGLE 'CURSOR POSITION'."
  157. 2230 PRINT"THEN TELL THE VIDEO CHIP[146]!":GOSUB63000
  158. 2240 PRINT"[147]IN REGISTER V+22[146] IS A MAGIC BIT,"
  159. 2250 PRINT"BIT 4[146], WHICH TURNS ON MULTI-COLOUR[146]."
  160. 2260 PRINT"DON'T DISTURB THE OTHER BITS IN V+22[146]"
  161. 2270 PRINT"SO POKE V+22,PEEK(V+22)OR16[146]."
  162. 2280 PRINT"IN THIS MODE LET'S SEE HOW THE C64"
  163. 2290 PRINT"DETERMINES WHAT TO PUT IN ONE OF THE"
  164. 2300 PRINT"1000 SCREEN POSITIONS, SAY #K."
  165. 2310 PRINT"(REMEMBER: K=0,1,2,....,999)":MS$="K=0 IS 1ST":GOSUB63100
  166. 2320 GOSUB63000:PRINT"[147]1[146]:LOOK IN SCREEN MEMORY[146] AND GET"
  167. 2330 PRINT"  THE K'TH BYTE, SAY IT'S N."
  168. 2340 PRINT"2[146]:LOOK IN CHARACTER MEMORY[146],"
  169. 2345 PRINT"  FROM CM+8*N TO CM+8*N+7"
  170. 2350 PRINT"  AND GET 8 BYTES: P,P+1,...,P+7."
  171. 2360 PRINT"THE BITS IN P,P+1,...,P+7 DETERMINE"
  172. 2370 PRINT"THE 'PIXEL AND[146] COLOUR PATTERN':"
  173. 2380 PRINT"00[146] SETS 2[146] PIXELS TO COLOUR #0"
  174. 2390 PRINT"01[146] SETS 2[146] PIXELS TO COLOUR #1"
  175. 2400 PRINT"10[146] SETS 2[146] PIXELS TO COLOUR #2"
  176. 2410 PRINT"11[146] SETS 2[146] PIXELS TO COLOUR #3":GOSUB63000:PRINT"[145][145][145]"
  177. 2420 PRINT"?????????":GOSUB63000
  178. 2430 PRINT"[147]LET'S SAY THAT AGAIN!"
  179. 2440 PRINT"SUPPOSE THE FIRST BYTE,P,IS:"
  180. 2450 PRINT"P=11 10 00 01 (IN BINARY)."
  181. 2460 PRINT"THEN THE FIRST ROW OF PIXELS WILL BE:"
  182. 2470 PRINT"[156]  [158]      [146][144] _SEE, 4 COLOURS!"
  183. 2480 PRINT"NOTE THAT 'PIXEL ON' OR 'PIXEL OFF'"
  184. 2490 PRINT"IS NO LONGER MEANINGFUL."
  185. 2500 PRINT"THERE ARE 4[146] POSSIBILITIES FOR"
  186. 2510 PRINT"EACH PAIR[146] OF PIXELS!"
  187. 2520 PRINT"NOTE,TOO,THAT THE HORIZONTAL RESOLUTION"
  188. 2530 PRINT"IS NOT AS 'DETAILED' AS IN 'NORMAL'"
  189. 2540 PRINT"COLOUR MODE (BIT4=0)."
  190. 2550 GOSUB63000:PRINT"[147]SUPPOSE THE NUMBER N[146] READ FROM"
  191. 2560 PRINT"SCREEN MEMORY[146] IS A 1[146]."
  192. 2570 PRINT"THEN THE 8 BYTES READ FROM CM+8-CM+15,"
  193. 2580 PRINT"IN CHARACTER MEMORY[146], WILL HAVE THE"
  194. 2590 PRINT"BIT PATTERN DEFINING THE LETTER 'A'."
  195. 2600 PRINT"(IF 'NORMAL' CHAR. MEMORY:CM=53248)"
  196. 2610 PRINT"NOTE:0='@',1='A',2='B', ETC.
  197. 2615 [153]"THE SAME NUMBERS YOU 'POKE' TO"
  198. 2616 [153]"SCREEN MEMORYWAIT TO GET @,A,B.."
  199. 2617 [153]"ON THE SCREEN!":[141]63000
  200. 2620 A$(0)[178]"00011000 =P"
  201. 2630 A$(1)[178]"00100100 =P+1"
  202. 2640 A$(2)[178]"01000010 =P+2"
  203. 2650 A$(3)[178]"01111110 =P+3"
  204. 2660 A$(4)[178]"01000010 =P+4"
  205. 2670 A$(5)[178]"01000010 =P+5"
  206. 2680 A$(6)[178]"01000010 =P+6"
  207. 2690 A$(7)[178]"00000000 =P+7"
  208. 2700 [153]"LOADHERE ARE THE 8 BYTES FOR 'A':":[129]I[178]0[164]7:[153]A$(I):[130]
  209. 2710 [153]"SEE THE LETTER 'A'?":[141]63000
  210. 2720 B$(0)[178]"   (null)(null)    =P"
  211. 2730 B$(1)[178]"  (null)  (null)   =P+1"
  212. 2740 B$(2)[178]" (null)    (null)  =P+2"
  213. 2750 B$(3)[178]" (null)(null)(null)(null)(null)(null)  =P+3"
  214. 2760 B$(4)[178]" (null)    (null)  =P+4"
  215. 2770 B$(5)[178]" (null)    (null)  =P+5"
  216. 2780 B$(6)[178]" (null)    (null)  =P+6"
  217. 2790 B$(7)[178]"         =P+7"
  218. 2795 [153]"";
  219. 2800 [129]I[178]0[164]7:[153]B$(I):[130]:MS$[178]"NICE A,EH?":[141]63100:[141]63000
  220. 2810 [153]"LOAD";:[129]I[178]0[164]7:[153]A$(I):[130]
  221. 2815 [153]"NOW, TAKEN IN PAIRS.."
  222. 2820 C$(0)[178]"00WAIT0110WAIT00 =P"
  223. 2830 C$(1)[178]"0010WAIT0100WAIT =P+1"
  224. 2840 C$(2)[178]"01WAIT0000WAIT10 =P+2"
  225. 2850 C$(3)[178]"0111WAIT1110WAIT =P+3"
  226. 2860 C$(4)[178]"01WAIT0000WAIT10 =P+4"
  227. 2870 C$(5)[178]"0100WAIT0010WAIT =P+5"
  228. 2880 C$(6)[178]"01WAIT0000WAIT10 =P+6"
  229. 2890 C$(7)[178]"0000WAIT0000WAIT =P+7"
  230. 2895 MS$[178]"IN PEARS?":[141]63100
  231. 2900 [141]63000:[153]"";:[129]I[178]0[164]7:[153]C$(I):[129]T[178]1[164]500:[130]:[130]
  232. 2910 [153]"DEPENDING UPON WHETHER THE 'BIT PAIRS'
  233. 2920 PRINT"ARE 00[146] OR 01[146] OR 10[146] OR 11[146]"
  234. 2930 PRINT"WE SET THE CORRESPONDING 'PIXEL PAIRS'"
  235. 2940 PRINT"TO COLOUR #0 OR 1 OR 2 OR 3.":GOSUB63000
  236. 2950 PRINT"";:
  237. 2960 D$(0)="  [159]  [156]    [146] =P"
  238. 2970 D$(1)="  [156]  [159]    [146] =P+1"
  239. 2980 D$(2)="[159]      [156]  [146] =P+2"
  240. 2990 D$(3)="[159]      [156]  [146] =P+3"
  241. 3000 D$(4)="[159]      [156]  [146][144] =P+4"
  242. 3010 D$(5)="[159]      [156]  [146][144] =P+5"
  243. 3020 D$(6)="[159]      [156]  [146][144] =P+6"
  244. 3030 D$(7)="        [146][144] =P+7"
  245. 3040 FORI=0TO7:PRINTD$(I):FORT=1TO500:NEXT:NEXT:MS$="LOOKS NICE":GOSUB63100
  246. 3050 GOSUB63000:PRINT"[147]";:FORI=0TO7:PRINTD$(I):NEXT
  247. 3060 PRINT"....LOOK LIKE AN 'A'?"
  248. 3070 PRINT"WELL, IT IS[146] MADE UP OF 4[146] COLOURS"
  249. 3080 PRINT"AND THAT MAY BE WORTH THE LOSS IN"
  250. 3090 PRINT"RESOLUTION."
  251. 3100 PRINT"HOWEVER, YOU MAY WANT TO USE THIS"
  252. 3110 PRINT"MULTI-COLOUR MODE[146] FOR OTHER THAN TO"
  253. 3120 PRINT"DISPLAY MULTI-COLOURED CHARACTERS!"
  254. 3130 GOSUB63000:PRINT"[147]WHAT ARE THESE 'COLOUR #0' ETC,?""
  255. 3140 [153]"IN V+33WAIT V+34WAIT & V+35WAIT ARE THE"
  256. 3150 [153]"COLOURS #0,#1 & #2."
  257. 3160 [153]"THE LOWER NYBBLE IN THESE VIDEO CHIP"
  258. 3170 [153]"REGISTERS DEFINE THE 16 POSSIBLE "
  259. 3180 [153]"COLOURS FOR THE 00WAIT 01WAIT & 10WAIT BIT PAIRS."
  260. 3190 [153]"SINCE V=53248WAIT THEN V+33WAIT=53281"
  261. 3200 [153]"WHICH YOU MAY RECOGNIZE AS THE REGISTER"
  262. 3210 [153]"GIVING THE 'BACKGROUND' COLOUR!":[153]"(COLOUR #0=BACKGROUND)"
  263. 3220 [141]63000:[153]"LOADNOTICE THAT, HAVING PICKED YOUR"
  264. 3230 [153]"FAVOURITE COLOURS #0,1 & 2, ALLWAIT"
  265. 3240 [153]"THE CHARACTERS ON THE SCREEN SHARE"
  266. 3250 [153]"THESE COLOURS!"
  267. 3260 [153]"BUTCMDCMDCMDFREFREFREON..EACH CHARACTER CAN HAVE"
  268. 3270 [153]"IT'S OWN 'COLOUR #3'!"
  269. 3280 [153]"(BUT!THERE ARE ONLY 8 TO CHOOSE FROM!)."
  270. 3290 [153]"WHERE'S COLOUR #3???":MS$[178]"MY COLOUR!":[141]63100:[141]63000
  271. 3300 [153]"LOADIN COLOUR MEMORYWAIT!!":MS$[178]"WHAT ELSE!":[141]63100
  272. 3305 [141]63000:[153]"LOADLET'S SEE HOW THAT WORKS:"
  273. 3310 [153]"RECALL THAT COLOUR MEMORYWAIT IS MADE"
  274. 3320 [153]"UP OF 1000 NYBBLES, AT 55296."
  275. 3330 [153]"THERE IS A 'NYBBLE' FOR EACH SCREEN"
  276. 3340 [153]"POSITION. YOU MIGHT EXPECT THAT THERE"
  277. 3350 [153]"ARE 16WAIT POSSIBLE COLOUR #3'S"
  278. 3370 [153]"BUTCMDCMDCMDFREFREFREON ONLY BITS 0-2 GIVE 'COLOUR #3'"
  279. 3380 [153]"AND THE BIT 3WAIT TELLS THE VIDEO CHIP"
  280. 3390 [153]"WHETHER THE CORRESPONDING SCREEN"
  281. 3391 E$(1)[178]"ORTAN=TAN=TAN=TAN^"
  282. 3392 E$(2)[178]"(null) (null) (null) (null) (null)"
  283. 3393 E$(3)[178]"/TAN>TAN>TAN>TANEXP"
  284. 3400 [153]"POSITION IS MULTI-COLOUR OR NOT!!":[141]63000
  285. 3401 [153]"LOAD"E$(1)
  286. 3402 [153]E$(2)" _ A NYBBLE IN COLOUR MEMORY"
  287. 3403 [153]E$(3)
  288. 3404 [153]" ^ ^ ^ ^"
  289. 3405 [153]" (null) COLOUR"
  290. 3406 [153]" (null)  # 3  "
  291. 3407 [153]" (null)"
  292. 3408 [153]" MULTI-BITWAIT":MS$[178]"   BIT 3WAIT":[141]63100:[141]63000
  293. 3410 [153]"LOADYOU MAY HAVE NOTICED SOMETHING STRANGE."
  294. 3411 [153]"WE KEEP SAYING THAT CHARACTER MEMORY"
  295. 3412 [153]"(LOWER/UPPER CASE) STARTS AT 55296"
  296. 3413 [153]"WE ALSO SAY THAT COLOUR MEMORY"
  297. 3414 [153]"STARTS AT 55296WAIT!!"
  298. 3415 [153]"WELL..IF YOU PEEK AND POKE 55296"
  299. 3416 [153]"YOU'LL GET COLOUR MEMORYWAIT ONLY."
  300. 3417 [153]"THE 'NORMAL' CHARACTER MEMORY"
  301. 3418 [153]"AT 55296 ISN'T SO SIMPLE TO ACCESS!"
  302. 3419 [153]"(EXCEPT FOR THE VIDEO CHIP!)"
  303. 3420 [153]"..BUT THAT'S ANOTHER STORY..":[141]63000
  304. 3421 [153]"LOADLET'S TRY MULTI-COLOUR!":MS$[178]"OK OK OK":[141]63100:[141]63000
  305. 3425 [153]"LOADABCDEFGHIJKLMNPQRSTUVWXYZ":[141]63000
  306. 3440 [153]"NOW INTO MULTI-COLOUR MODEWAIT WITH:"
  307. 3450 [153]"V=53248:POKEV+22,PEEK(V+22)OR16":[141]63001
  308. 3460 V[178]53248:[151]V[170]22,[194](V[170]22)[176]16
  309. 3470 [153]"NOTHING CHANGED, RIGHT?"
  310. 3480 [153]"THAT'S BECAUSE COLOUR MEMORY HAS "
  311. 3490 [153]"BIT 3 = 0WAIT!":[141]63001:[153]"LET'S:"
  312. 3500 [153]"FORI=0TO25:POKE55296+I,8+8*RND(1):NEXT"
  313. 3510 [153]"SETTING THE 1ST 26 NYBBLES IN COL. MEM."
  314. 3520 [153]"TO RANDOM NUMBERS FROM 8 TO 15,":[153]"THEN BIT 3 = 1":[141]63001
  315. 3530 [129]I[178]0[164]25:[151]55296[170]I,8[170]8[172][187](1):[130]:[141]63000
  316. 3540 [153]"LOADA B C D E F G H I J K L M ":V[178]53248:[151]V[170]35,1:[151]V[170]34,0
  317. 3550 [129]I[178]0[164]25[169]2:[151]55296[170]I,8[170]8[172][187](1):[130]:[151]53281,12:[153]""
  318. 3555 V[178]53248:[151]V[170]22,[194](V[170]22)[176]16:[141]63000
  319. 3560 [153]"LET'S PICK SOME COLOURS:"
  320. 3570 [153]"FORI=0TO25:POKE55296+I,8+5:NEXT"
  321. 3580 [153]"SET COLOUR #3 TO GREEN (GREEN=5)":[141]63001
  322. 3585 [129]I[178]0[164]25:[151]55296[170]I,13:[130]
  323. 3590 [153]"POKE V+35,0WAIT..SET COLOUR #2 TO BLACK(0)":[141]63001:[151]53248[170]35,0
  324. 3600 [153]"POKE V+34,1WAIT..SET COLOUR #1 TO WHITE(1)":[141]63001:[151]53248[170]34,1
  325. 3610 [153]"POKE V+33,2WAIT..SET COLOUR #0 TO RED(2)":[141]63001:[151]53248[170]33,2
  326. 3620 [141]63000:[153]"LOAD":[141]60000:[153]"LOAD             BIT MAP MODE"
  327. 3630 [153]"IN REGISTER 17 OF THE VIDEO CHIP"
  328. 3640 [153]"IS ANOTHER MAGIC BIT, BIT 5WAIT, WHICH"
  329. 3650 [153]"PUTS THE C64 INTO BIT MAP MODEWAIT."
  330. 3660 [153]"POKE V+17,PEEK(V+17)OR32WAIT DOES IT!":MS$[178]"  V+17WAIT":[141]63100
  331. 3665 [141]63000
  332. 3670 [153]"LOADBIT WE WON'T..JUST YET..":[141]63000:[153]"WELL..JUST ONCE:"
  333. 3680 [141]63000:V[178]53248:[151]V[170]17,[194](V[170]17)[176]32:[129]T[178]1[164]1000:[130]
  334. 3690 V[178]53248:[151]V[170]17,[194](V[170]17)[175]223
  335. 3700 [153]"LOADLET'S SEE HOW THATWAIT HAPPENS!"
  336. 3710 [153]"TO DETERMINE WHAT GOES ON THE SCREEN"
  337. 3720 [153]"AT SOME LOCATION 'K' (0<=K<=999)"
  338. 3730 [153]"THE C64 DOES THE FOLLOWING:"
  339. 3740 [153]"1WAIT:GO DIRECTLY TO CHARACTER MEMORY"
  340. 3750 [153]"  TO LOCATIONS CM+8*K-CM+8*K+7"
  341. 3760 [153]"  AND GET 7 BYTES:P,P+1,...,P+7."
  342. 3770 [153]"2WAIT:GO TO SCREEN MEMORYWAIT, TO SM+K,"
  343. 3780 [153]"  AND GET 1 BYTE, SAY N.":[141]63000
  344. 3790 [153]"LOADARMED WITH PWAIT,P+1WAIT,..,P+7WAIT AND NWAIT,"
  345. 3800 [153]"SET THE PIXELS TO 'COLOUR C0' OR TO"
  346. 3810 [153]"'COLOUR C1' DEPENDING UPON WHETHER THE"
  347. 3820 [153]"CORRESPONDING BIT IN THE P,P+1,...,P+7"
  348. 3830 [153]"PIXEL PATTERN IS '0' OR '1'":MS$[178]"0=C0WAIT 1=C1WAIT":[141]63100
  349. 3840 [141]63000:[153]"LOADCOLOUR C0..COLOUR C1?????":[141]63001
  350. 3850 [153]"WE LOOK AT THE BYTE,N,TAKEN FROM"
  351. 3860 [153]"SCREEN MEMORYWAIT:"
  352. 3870 [129]I[178]1[164]3:[153]E$(I)E$(I):[130]
  353. 3880 [153]" ^ ^ ^ ^  ^ ^ ^ ^"
  354. 3890 [153]" (null) (null) (null) (null)  COLOUR C0"
  355. 3900 [153]" (null) (null) (null) (null)"
  356. 3910 [153]"COLOUR C1"
  357. 3920 [141]63001:[153]"NICE??":[141]63000:MS$[178]"VERY NICE!":[141]63100:[153]"LOAD"
  358. 3930 [141]63000:[153]"NOTECMDCMDCMDCMDFREFREFREFREON:CHARACTER MEMORYWAIT STILL GIVES"
  359. 3940 [153]"     THE 'PIXEL PATTERN', BUT"
  360. 3950 [153]"     SCREEN MEMORYWAIT GIVES THE COLOURS!!"
  361. 3960 [153]"FURTHERMORE..THE 8K BYTES IN CMWAIT-CM+8191"
  362. 3970 [153]"(CHARACTER MEMORY)..ARE SIMPLY...":[141]63001
  363. 3980 [153]"LAID ON TOP OF THE SCREENWAIT!!":[141]63001
  364. 3990 [153]"JUST POKE V+17,PEEK(V+17)OR32"
  365. 4000 MS$[178]"  V+17WAIT":[141]63100:[141]63000:[153]"LOAD":[141]63000
  366. 4010 [153]"NOW, TO GET SOMETHING INTERESTING"
  367. 4020 [153]"ON THE SCREEN IN BIT MAP MODEWAIT, WE"
  368. 4030 [153]"MUST PUT GOOD LOOKING 'PIXEL PATTERNS'"
  369. 4040 [153]"INTO CHARACTER MEMORYWAIT."
  370. 4050 [153]"HOW?":[141]63001
  371. 4060 [153]"POKE GOOD STUFF INTO, SAY, LOCATIONS"
  372. 4070 [153]"8192 TO 8192+8191 (8K'S WORTH), THEN"
  373. 4080 [153]"TELL THE VIDEO CHIP TO CHANGE THE"
  374. 4090 [153]"'NORMAL' LOCATION OF CHARACTER MEMORYWAIT"
  375. 4100 [153]"SO IT STARTS AT 8192!"
  376. 4110 [153]"HOW?":MS$[178]"I GIVE UP":[141]63100:[141]63000
  377. 4120 [153]"LOADPOKE V+24,(PEEK(V+24)AND240)OR8)"
  378. 4130 [153]"WHICH SETS THE LOWER  NYBBLE IN THE"
  379. 4140 [153]"24'TH REGISTER TO 100(null)WAIT, WHILE LEAVING"
  380. 4150 [153]"ALL THE UPPER BITS UNCHANGED..."
  381. 4160 [153]"AND 100(null)WAIT=8 (IN DECIMAL)"
  382. 4170 [153]"AND 8*1024=8192WAIT"
  383. 4180 [153]"SO CMWAIT=START OF CHARACTER MEMORYWAIT IS"
  384. 4190 [153]"NOW AT 8192WAIT!!":MS$[178]"  SIMPLE":[141]63100:[141]63000
  385. 4200 [153]"LOADWANT TO LOAD "[199](34)"GRAPHICS-2"[199](34)
  386. 4210 [153]"AND SEE SOME NICE PIXEL PATTERNS?"
  387. 4220 [133]"   YES!CMDCMDCMDCMDCMDCMD";A$
  388. 4230 [139][200](A$,1)[179][177]"Y"[167]4300
  389. 4231 [153]"LOADOK..WE'LL LOADWAIT 'GRAPHICS-2' AND RUNWAIT"
  390. 4232 [153]"IT. THE 8K LOCATIONS STARTING AT 8192"
  391. 4233 [153]"WILL BE 'CLEARED' OF GARBAGE AND WE'LL"
  392. 4234 [153]"GO TO BIT MAP MODEWAIT AND PLOT A NICE"
  393. 4235 [153]"CURVE BEFORE YOUR VERY EYES BY POKEWAITING"
  394. 4236 [153]"GOOD LOOKIN' BITS INTO OUR 'NEW'"
  395. 4237 [153]"CHARACTER MEMORYWAIT."
  396. 4238 [153]"YOU MAY WANT TO DEFINE YOUR OWN":[153]"CURVE....OR.."
  397. 4239 [153]"..MAYBE EVEN YOUR OWN CHARACTERS!":[141]63000
  398. 4240 [153]"LOADWE'LL HAVE A BIT OF A PROBLEM WITH"
  399. 4241 [153]"DEFINING SOME NEW CHARACTERS."
  400. 4242 [153]"TO ACCESS THE 'CHARACTER ROM' AT 53248+"
  401. 4243 [153]"WE'LL HAVE TO MOVE THE CIAWAIT I/O CHIPS"
  402. 4244 [153]"WHICH LIVE THERE!"
  403. 4245 [153]"AFTER SWITCHING OUT THESE CHIPS"
  404. 4246 [153]"WE CAN ACCESS THE 'CHARACTER ROM'"
  405. 4247 [153]"UNDERNEATH.":[153]"FREFREFREFREFREFREFREFREFREFRE":[141]63000
  406. 4250 [153]"LOADLOAD"[199](34)"GRAPHIC TUT-2.64"[199](34)",8":[153]"RUN"
  407. 4255 [151]198,3:[151]631,13:[151]632,13:[128]
  408. 4300 [153]"LOAD":MS$[178]"AU REVOIR!":[141]63100:[153]"":[128]
  409. 60000 [143] INITIALIZE
  410. 60001 BT$[178]"":[129]I[178]1[164]24:BT$[178]BT$[170]"":[130]:[153][199](142)
  411. 60002 PT$[178]"ORTANTANTANTANTANTANTANTANTANTAN^CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)(null)CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD/=TANTANTANTANTANTANTANTAN=EXP"
  412. 60003 PT$[178]PT$[170]"CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB((null)CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDFN============STOPTHEN"
  413. 60004 PT$[178]PT$[170]"CMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD(null)(null)TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB(TAB((null)(null)ONONONONCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMDCMD"
  414. 60005 PT$[178]BT$[170]"ONONONONONON"[170]PT$
  415. 60007 ML$[178]""
  416. 60008 WD[178]40:CRT[178]1024
  417. 60009 W2[178]WD[173]2:W3[178]WD[171]1:W1$[178][202]([196](WD),2):[151]53281,15:[151]53280,12:[153]"STOP"
  418. 60010 V[178]53248:[129]I[178]0[164]16:[151]V[170]I,0:[130]
  419. 60011 [151]V[170]23,0:[151]V[170]29,0:[129]I[178]0[164]7:[151]V[170]39[170]I,0:[130]
  420. 60020 [142]
  421. 62000 [141]63000
  422. 62001 [153]SD$CL$:[153]CL$:[153]CL$
  423. 62003 [142]
  424. 63000 [153]"STOPHIT RETURNWAIT TO CONTINUE";
  425. 63001 [161]A$:[139]A$[179][177]""[167]63001
  426. 63002 [161]A$:[139]A$[178]""[167]63002
  427. 63003 [142]
  428. 63100 [129]T[178]1[164]5:[153]PT$MS$;
  429. 63101 [153]PT$"          ";
  430. 63102 [153]PT$MS$;:[130]
  431. 63103 [153]"STOP":[142]
  432. 63900 SD$[178]"":CL$[178]"WAIT                                      WAIT"
  433. 63901 SR$[178]""
  434. 63902 [142]
  435.